<?php

//防止恶意调用
if (!defined('IN_MOD'))
{
    die('Hacking attempt');
}

// 自定义模块，自定义区块，自定义配置
// 自定义栏目，自定义插件，自定义扩展，自定义单页，自定义分类

/** Ajax调用路径 http://www.fastxcms.com/portal/ajax/index.html
****************************************************************/
/** JQUERY的AJAX中 get()、post()的跨域方法
** 原文地址：https://blog.csdn.net/alokka/article/details/83060184
** header('Access-Control-Allow-Origin: *');
** header('Access-Control-Allow-Methods: POST');
** header('Access-Control-Max-Age: 1000');
************************************************/

// 调用验证码类
require MODULEPARA_BASE_PATH."/service/validatecode/ValidateCodeService.class.php";
global $modulevc;$modulevc = new ValidateCode();

/**
 * PHP模拟post进行url请求
 * @param string $url
 * @param array $post_data
 * 使用方法：
 * $url="http://localhost/header_server.php";
 * $body = array("mobile"=>"13899999999", "username"=>"Nick");
 * $header = array("Content-Type:multipart/x-www-form-urlencoded", "token:test", "client:h5");
 * array("content-type: application/x-www-form-urlencoded;charset=UTF-8"); 设置UTF8
 * array("Content-Type:application/xml; charset=utf-8") XML请求
 * $result = curlPost($url, $body, 5, $header, 'json');
 * var_dump($result);
 * 1. 不管"Content-Type:multipart/form-data"还是"Content-Type:application/x-www-form-urlencoded"只要采用post方式发送数据，并且在body体中的数据是数组格式，那么在接收端就可以使用$_POST获取到。
 * 2. 在接收端使用file_get_contents("php://input")接收时，只能获取到字符串类型的body体数据。
 * 3. 请求时，在header中添加的参数xxx，在接收端可以使用$_SERVER["HTTP_XXX"]进行获取。
 */
function configpost($url="", $post_data = array(), $timeout = 5, $header = "", $data_type = "")
{
	$header = empty($header) ? '' : $header;
    //支持json数据数据提交
    if($data_type == 'json'){
        $post_string = json_encode($post_data);
    }elseif($data_type == 'array') {
        $post_string = $post_data;
    }elseif(is_array($post_data)){
        $post_string = http_build_query($post_data, '', '&');
    }
    
    $ch = curl_init();    // 启动一个CURL会话
    curl_setopt($ch, CURLOPT_URL, $url);     // 要访问的地址
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // 对认证证书来源的检查   // https请求 不验证证书和hosts
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    //curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);     // Post提交的数据包
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 设置超时限制防止死循环
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    //curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     // 获取的信息以文件流的形式返回 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //模拟的header头
    $result = curl_exec($ch);

    // 打印请求的header信息
    //$a = curl_getinfo($ch);
    //var_dump($a);

    curl_close($ch);
    return $result;
}

/**
 * PHP模拟get进行url请求
 * @param string $url
 */
function configget($url=""){
    $curl = curl_init(); // 启动一个CURL会话
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
    $tmpInfo = curl_exec($curl);     //返回api的json对象
    //关闭URL请求
    curl_close($curl);
    return $tmpInfo;    //返回json对象
}

/* php中调用WebService接口
** SOAP(Simple Object Access Protocol) 用来描述传递信息的格式
** WSDL(Web Services Description Language) 用来描述如何访问具体的接口
** UDDI(Universal Description Discovery and Integration) 用来管理，分发，查询WebService
** 调用第三方短信提供商的WebService接口。演示实例
** ------------------------------------------------------------------------------
** //调用接口
** $parm = array('mobile' => ‘136XXXXXX’, 'mmsid' => 'XXX', 'sToken' => 'XXX');
** $result = $client->SendPersonMMS($parm);
** //获取返回值
** //将stdclass object的$result转换为array
** $result = get_object_vars($result);  
** //输出结果 
** echo $result["SendPersonMMSResult"];
*/
function configwebservice($apiurl="")
{
	try {
	
		//解决OpenSSL Error问题需要加第二个array参数，具体参考 /moduleaq/stackoverflow.com/questions/25142227/unable-to-connect-to-wsdl
		$client = new SoapClient($apiurl,// "/moduleaq/122.224.230.4:18003/newyorkWS/ws/ReceiveEncryptDeclare?wsdl"
			array(
				"stream_context" => stream_context_create(
					array(
						'ssl' => array(
							'verify_peer' => false,
							'verify_peer_name' => false,
						)
					)
				)
			)
		);
		
		return $client;

	} catch (SOAPFault $e) {
		print $e;
	}
}

// 模块数据
function ajax_configmodule($modulewhere=array())
{	
	global $configinfo;
	
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('ajaxid','limit','page'),'intval');
	
	$modulewhere["arrayclass"] = !empty($modulewhere["ajaxid"])  ? $modulewhere["ajaxid"] : $moduleaqvar['ajaxid'];
	$modulewhere["where"] = !empty($modulewhere["where"])  ? $modulewhere["where"] : "";
	$modulewhere["order"] = !empty($modulewhere["order"])  ? $modulewhere["order"] : "default";
	$modulewhere["limit"] = !empty($modulewhere["limit"])  ? $modulewhere["limit"] : $moduleaqvar['limit'];
	$modulewhere["page"] = !empty($modulewhere["page"])  ? $modulewhere["page"] : $moduleaqvar['page'];
	
	$listdata=modulepara("configmodule",$modulewhere,1);
	
	if(empty($listdata))
	{
		$result['error'] = 1;
		$result['message'] = "没有数据！";
		return $result;
	}
	
	$result['error'] = 0;
	$result['message'] = "查询成功！";
	$result['content'] = $listdata;
	$result['count'] = $listdata[0]['count'];
	$result['ajaxid'] = $modulewhere["arrayclass"];
	
	// ajax分页加载
	$result['tpage'] = $listdata[0]['tpage'];
	
	return $result;
}

// 模块栏目
function ajax_configcolumn($modulewhere=array())
{
	global $configinfo;
	
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('ajaxid','limit'),'intval');
		
	$modulewhere["classid"] = !empty($modulewhere["ajaxid"])  ? $modulewhere["ajaxid"] : $moduleaqvar['ajaxid'];
	$modulewhere["where"] = !empty($modulewhere["where"])  ? $modulewhere["where"] : "";
	$modulewhere["order"] = !empty($modulewhere["order"])  ? $modulewhere["order"] : "";
	$modulewhere["limit"] = !empty($modulewhere["limit"])  ? $modulewhere["limit"] : $moduleaqvar['limit'];
	
	$listdata=modulepara("configcolumn",$modulewhere,1);
	
	if(empty($listdata))
	{
		$result['error'] = 1;
		$result['message'] = "没有数据！";
		return $result;
	}
	
	$result['error'] = 0;
	$result['message'] = "查询成功！";
	$result['content'] = $listdata;
	$result['count'] = $listdata[0]['count'];
	$result['ajaxid'] = $modulewhere["classid"];
	
	return $result;
}

// 当前分类
function ajax_classnow($modulewhere=array())
{	
	global $configinfo;
	
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('ajaxid'),'intval');
	
	$modulewhere["tablename"] = !empty($modulewhere["tablename"])  ? $modulewhere["tablename"] : $configinfo['ecs_article_cat'];
	$modulewhere["classid"] = !empty($modulewhere["ajaxid"])  ? $modulewhere["ajaxid"] : $moduleaqvar['ajaxid'];
	$modulewhere["classidname"] = !empty($modulewhere["classidname"])  ? $modulewhere["classidname"] : $configinfo['cat_id'];
	$modulewhere["where"] = !empty($modulewhere["where"])  ? $modulewhere["where"] : "";

	$columninfo = columninfo($modulewhere["tablename"],$modulewhere["classid"],$modulewhere["classidname"],$modulewhere["where"]);

	if(empty($listdata))
	{
		$result['error'] = 1;
		$result['message'] = "没有数据！";
		return $result;
	}
	
	$result['error'] = 0;
	$result['message'] = "查询成功！";
	$result['content'] = $columninfo;
	$result['ajaxid'] = $modulewhere["classid"];
	
	return $result;
}

// 模块修改
function ajax_updatemodule($modulewhere=array())
{
	global $configinfo;
	
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('ajaxid'),'intval');
	
	$modulewhere["tablename"] = !empty($modulewhere["tablename"])  ? $modulewhere["tablename"] : $configinfo['ecs_article'];
	$modulewhere["data"] = !empty($modulewhere["data"])  ? $modulewhere["data"] : "";
	$modulewhere["dataidname"] = !empty($modulewhere["dataidname"])  ? $modulewhere["dataidname"] : $configinfo['article_id'];
	$modulewhere["dataid"] = !empty($modulewhere["ajaxid"])  ? $modulewhere["ajaxid"] : $moduleaqvar['ajaxid'];
	$modulewhere["fielddata"] = !empty($modulewhere["fielddata"])  ? $modulewhere["fielddata"] : "";
	$modulewhere["where"] = !empty($modulewhere["where"])  ? $modulewhere["where"] : "";
	$modulewhere["moduleid"] = !empty($modulewhere["moduleid"])  ? $modulewhere["moduleid"] : "";
	
	$globalconfig = array();
	$globalconfig['moduleid'] = $modulewhere["moduleid"];
	$configinfo['fun_updatedata'] = $globalconfig;
	$updateop = updatedata($modulewhere["tablename"], $modulewhere["data"], $modulewhere["dataidname"], $modulewhere["dataid"], $modulewhere["where"], $modulewhere["fielddata"]);
	
	if($updateop == 1)
	{
		$resdata = datainfo($modulewhere["tablename"],$modulewhere["dataid"],$modulewhere["dataidname"]);
	}
	
	if(empty($resdata))
	{
		$result['error'] = 1;
		$result['message'] = "没有数据！";
		return $result;
	}
	
	$result['error'] = 0;
	$result['message'] = "修改成功！";
	$result['content'] = $resdata;
	$result['ajaxid'] = $modulewhere["dataid"];
	
	return $result;
}

// 验证码加载
function ajax_incimgcode()
{
	global $modulevc;
	
	$modulevc->doimg();
	$_SESSION["moduleimgcode"] = $modulevc->getCode();//验证码保存到SESSION中	
}

// 用户点击提交操作记录（用于：点赞，收藏，访问记录等）
function ajax_userclickaction($tablename="")
{
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('uid','ajaxid'),'intval');
	$uid = $moduleaqvar['uid'];
	$ajaxid = $moduleaqvar['ajaxid'];
	
	// 是否操作
	$awesome_user = datainfo($tablename,$ajaxid,"listid");
	if(is_array($awesome_user))
	{
		$result['error'] = 1;
		$result['message'] = '已经操作！';
		return $result;
	}
	
	$data = array();
	$data['uid'] = $uid;
	$data['listid'] = $ajaxid;
	insertdata($tablename, $data);
	
	$result['error'] = 0;
	$result['message'] = "操作成功！";
	$result['content'] = array();
	$result['type'] = 1;
	$result['ajaxid'] = $ajaxid;
	
	return $result;
}

// 用户删除提交操作记录（用于：点赞，收藏，访问记录等）
function ajax_delclickaction($tablename="")
{
	$result = array('error' => 0, 'message' => '', 'content' => '', 'count' => '', 'ajaxid' => '');
	
	$moduleaqvar = moduleaqvar(array('uid','ajaxid'),'intval');
	$uid = $moduleaqvar['uid'];
	$ajaxid = $moduleaqvar['ajaxid'];
	
	// 是否删除
	$awesome_user = datainfo($tablename,$ajaxid,"listid");
	if(empty($awesome_user))
	{
		$result['error'] = 1;
		$result['message'] = '已经删除！';
		return $result;
	}
	
	deletedata($tablename, "listid", $ajaxid, "uid = ".$uid);
	
	$result['error'] = 0;
	$result['message'] = "删除成功！";
	$result['content'] = array();
	$result['type'] = 0;
	$result['ajaxid'] = $ajaxid;
	
	return $result;
}

// PHP 代码自动执行之定时器
// ajax_autorunphp(10,MODULEPARA_PATH.'/expplugins/hgczapi',"postdata");
function ajax_autorunphp($time=0,$fileurl="",$fun="",$data="")
{
	ignore_user_abort(true);//关闭浏览器后，继续执行php代码
	set_time_limit(0);//程序执行时间无限制
	$interval = $time; //多长时间执行一次
	
	// 在目录下存放一个文件，如果这个文件不存在，说明已经在执行过程中了，该任务就不能再激活，执行第二次，否则这个文件被多次访问的话，服务器就要崩溃掉了
	if(!file_exists($fileurl.'/ajax_auto.lock'))
	{
		echo "正在执行中...";
		exit();
	}
	
	do {
	  // 如果不存在这个文件，就停止执行，这是一个开关的作用
	  if(!file_exists($fileurl.'/ajax_ok.lock'))
	  {
		  echo "已停止执行...";
		  break;
	  }
	  sleep($loop);
	  // ...
	  $fun($data);
	  // ...
	  @unlink($fileurl.'/ajax_auto.lock'); // 这里就是通过删除来告诉程序，这个定时任务已经在执行过程中，不能再执行一个新的同样的任务
	  $loop = $interval;
	} while(true);
}

// 图片上传
function ajax_uploadpic($picname="", $module="article")
{
	global $configinfo,$moduleupload;
	
	$topmodule_upconfiginfo = gettopmodule($module,"uploadconfig");
	$upconfiginfo = $topmodule_upconfiginfo;
	
	//设置属性(上传的位置， 大小， 类型， 名是是否要随机生成)
	$moduleupload -> set("path", $configinfo['uploaddir'].$upconfiginfo['filesaveurl'].date('Ym',time())."/");
	$moduleupload -> set("maxsize", $configinfo['uploadsize']);
	$moduleupload -> set("allowtype", $configinfo['uploadtype']);
	$moduleupload -> set("israndname", $configinfo['uploadname']);
	
	/* 上传图片数据存在时 */
	if(isset($_FILES[$picname]))
	{
		if($_FILES[$picname])
		{
			//使用对象中的upload方法， 就可以上传文件， 方法需要传一个上传表单的名子 pic, 如果成功返回true, 失败返回false
			if($moduleupload -> upload($picname)) {
				//获取上传后文件名子
				$data['url'] = $upconfiginfo['filesaveurl'].date('Ym',time())."/".$moduleupload->getFileName();
		 
			}
		}
	}
	
	$result['code'] = "success";
	$result['data'] = $data;
	
	return $result;
}

// 文件上传
function ajax_uploadfile($module="article")
{
	$topmodule_upconfiginfo = gettopmodule($module,"uploadconfig");
	$upconfiginfo = $topmodule_upconfiginfo;
	
	//文件上传
	$fileArr = $_FILES['mf'];
	
	//设置预览目录,上传成功的路径  
	$previewPath = $upconfiginfo['upfiledir'].$upconfiginfo['filesaveurl'];
	$previewPath = $previewPath.date('Ym',time())."/";
	
	if(!file_exists($previewPath)){
		//检查是否有该文件夹，如果没有就创建，并给予最高权限
		mkdir($previewPath, 0700, true);
	}
	
	$ext = pathinfo($fileArr['name'], PATHINFO_EXTENSION);//获取当前上传文件扩展名
	 
	$arrExt = getstrtoarr(",",$upconfiginfo['uploadtype']);
	
	if(!in_array($ext,$arrExt))
	{
		exit(json_encode(-1,JSON_UNESCAPED_UNICODE));//视/音频或采用了不合适的扩展名！    
	
	}else{              
		
		//文件上传到预览目录      
		$previewName = md5(mt_rand(1000,9999)).time().'.'.$ext; //文件重命名 
		$previewSrc = $previewPath.$previewName;
		
		//上传文件操作，上传失败的操作
		if(move_uploaded_file($fileArr['tmp_name'],$previewSrc))
		{
			exit($upconfiginfo['filesaveurl'].date('Ym',time())."/".$previewName);
		}else{
			//上传成功的失败的操作
			exit(json_encode(0,JSON_UNESCAPED_UNICODE));
		}        
	} 	
}

// 判断是否是Ajax请求
function ajax_isajaxrequest()
{
	$isajax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
	if(!$isajax) {
		$input = file_get_contents("php://input");
		if (!empty($input)) {
			$__input = @json_decode($input, true);
			if (!empty($__input)) {
				$_GPC['__input'] = $__input;
				$isajax = true;
			}
		}
		unset($input, $__input);
	}
	
	return $isajax;	
}

// ajax成功信息返回
function ajax_success($error=0,$message="查询成功",$content="",$ajaxid=0,$count=0,$tpage=0,$moredata=array())
{
	if(is_array($error))
	{
		$error['error'] = $error['error'] ? $error['error'] : 0;
		$error['message'] = $error['message'] ? $error['message'] : "查询成功";
		$error['content'] = $error['content'] ? $error['content'] : "";
		$error['ajaxid'] = $error['ajaxid'] ? $error['ajaxid'] : 0;
		$error['count'] = $error['count'] ? $error['count'] : 0;
		$error['tpage'] = $error['tpage'] ? $error['tpage'] : 0;
		$result = $error;
	}else{
		$result['error'] = $error;
		$result['message'] = $message;
		$result['content'] = $content;
		$result['ajaxid'] = $ajaxid;
		$result['count'] = $count;
		$result['tpage'] = $tpage;
		$result += $moredata;
	}
	
	echo json_encode($result);
	die;exit;
}

// ajax错误信息返回
function ajax_error($error=1,$message="查询失败",$content="")
{
	$result['error'] = $error;
	$result['message'] = $message;
	$result['content'] = $content;
	
	echo json_encode($result);
	die;exit;
}
?>